import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)


// 配置项目路由
const router = new VueRouter({
  mode: "history",
  routes: [{
    path: '/',
    // redirect: '/login' // 重定向
    redirect: '/home' // 重定向
  },
  // {
  //   path: '/login', //首页
  //   name: 'Login',
  //   component: () => import('@/views/home/Login'),
  //   meta: {
  //     isShowTabbar: true
  //   },

    {
      path: '/home', //首页
      name: 'Home',
      component: () => import('@/views/home/Home'),
      meta: {
        isShowTabbar: true
      }

      // children: [ // 二级路由 不能加'/' 加'/'表示一级路由
      //   {
      //     path: 'searchPopup',
      //     component: () => import('@/views/home/search/searchPopup.vue'),
      //     name: 'searchpopup',
      //     meta: {
      //       isshowtabbar: false
      //     },
      //   }
      // ],

    },
    {
      path: '/user', //我的
      name: 'User',
      component: () => import('@/views/user/User'),
      meta: {
        isShowTabbar: true
      }
    },
    {
      path: '/report', //我的
      name: 'Report',
      component: () => import('@/views/report/Report'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/claim/main', //我的
      name: 'ClaimMain',
      component: () => import('@/views/claim/ClaimMain'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/apply/claim', //我的
      name: 'ApplyClaim',
      component: () => import('@/views/claim/ApplyClaim'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/other/claim', //我的
      name: 'OtherClaim',
      component: () => import('@/views/claim/OtherClaim'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/claim/data', //我的
      name: 'ClaimData',
      component: () => import('@/views/claim/ClaimData'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/map2', //我的
      name: 'MapPosition',
      component: () => import('@/views/map/MapPosition'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/map', //我的
      name: 'map',
      component: () => import('@/components/Map'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/intro', //我的
      name: 'intro',
      component: () => import('@/components/Intro'),
      meta: {
        isShowTabbar: false
      }
    },
    {
      path: '/complaint', //我的
      name: 'complaint',
      component: () => import('@/views/map/Complaint'),
      meta: {
        isShowTabbar: false
      }
    },
  ]
})

// 路由前置守卫
router.beforeEach((to, from, next) => {
  // 有token就表示已经登录
  // 想要进入购物车页面，必须有登录标识token
  let token = localStorage.getItem('token')
  if (to.path == '/cart') {
    // 此时必须要有token
    if (token) {
      next(); // next()去到to所对应的路由界面
    } else {
      Vue.prototype.$toast('请先登录');
      // 定时器
      setTimeout(() => {
        next("/user"); // 强制去到"/user"所对应的路由界面
      }, 1000);
    }
  } else {
    // 如果不是去往购物车的路由，则直接通过守卫，去到to所对应的路由界面
    next()
  }
})

// 该段代码不需要记，理解即可
// 在vue-router在3.1.0版本之后，push和replace方法会返回一个promise对象，如果跳转到相同的路由，就报promise uncaught异常
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch((err) => err);
};

export default router
